package ar.com.sistventa.form.articulos;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.List;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;
import javax.swing.border.TitledBorder;
import javax.swing.table.DefaultTableModel;

import ar.com.sistventa.entities.Marca;
import ar.com.sistventa.form.articulos.impl.AgregarModificarArticulosFormImpl;
import ar.com.sistventa.utils.Constantes;
import ar.com.sistventa.utils.ValidacionCampo;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class MarcaForm extends JDialog {
	private static final long serialVersionUID = 1L;
	private final JPanel contentPanel = new JPanel();
	private JTextField txtDescripcion;
	private JTable tbMarca;

	private AgregarModificarArticulosFormImpl agregarModificarArticulosFormImpl;
	private List<Marca> marcaList;
	private Marca marca;

	/**
	 * Create the dialog.
	 * 
	 * @wbp.parser.constructor
	 */

	public MarcaForm(JFrame parent) {
		super(parent, true);
		setResizable(false);
		setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
		initForm();
		setTitle("Marcas");
		agregarModificarArticulosFormImpl = new AgregarModificarArticulosFormImpl();
		marcaList = agregarModificarArticulosFormImpl.buscarMarcas("");
		cargarTabla();
	}

	public MarcaForm(JDialog parent) {
		super(parent, true);
		setResizable(false);
		setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
		initForm();
		setTitle("Marcas");
		agregarModificarArticulosFormImpl = new AgregarModificarArticulosFormImpl();
		marcaList = agregarModificarArticulosFormImpl.buscarMarcas("");
		cargarTabla();
	}

	@SuppressWarnings("serial")
	private void initForm() {
		setBounds(100, 100, 257, 450);
		getContentPane().setLayout(new BorderLayout());
		contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
		getContentPane().add(contentPanel, BorderLayout.CENTER);
		contentPanel.setLayout(null);

		JPanel panelBusqueda = new JPanel();
		panelBusqueda.setBorder(new TitledBorder(new LineBorder(new Color(0, 0,
				0)), " Busqueda ", TitledBorder.LEADING, TitledBorder.TOP,
				null, null));
		panelBusqueda.setBounds(10, 10, 218, 128);
		contentPanel.add(panelBusqueda);
		panelBusqueda.setLayout(null);

		txtDescripcion = new JTextField();
		txtDescripcion.addKeyListener(new KeyAdapter() {
			@Override
			public void keyTyped(KeyEvent e) {
				ValidacionCampo.verificarLargoCamposJTextField(e,
						txtDescripcion, 30);
			}
		});
		txtDescripcion.addFocusListener(new FocusAdapter() {
			@Override
			public void focusGained(FocusEvent e) {
				txtDescripcion.selectAll();
			}
		});
		txtDescripcion.setBounds(15, 44, 150, 20);
		panelBusqueda.add(txtDescripcion);
		txtDescripcion.setColumns(10);

		JLabel lblDescripcion = new JLabel("Descripcion");
		lblDescripcion.setBounds(15, 19, 73, 14);
		panelBusqueda.add(lblDescripcion);

		JButton btnBuscar = new JButton("");
		btnBuscar.setToolTipText("Buscar");
		btnBuscar.setIcon(new ImageIcon(Constantes.IMAGEN_BUSCAR));
		btnBuscar.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				eventoBotonBuscar();
			}
		});
		btnBuscar.setBounds(175, 44, 27, 21);
		panelBusqueda.add(btnBuscar);

		JButton btnAgregar = new JButton("");
		btnAgregar.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				eventoBotonAgregar();
			}
		});
		btnAgregar.setToolTipText("Agregar Marca");
		btnAgregar.setIcon(new ImageIcon(Constantes.IMAGEN_NUEVO));
		btnAgregar.setBounds(15, 75, 40, 40);
		panelBusqueda.add(btnAgregar);

		JPanel panelTabla = new JPanel();
		panelTabla.setBorder(new TitledBorder(
				new LineBorder(new Color(0, 0, 0)), " Categorias ",
				TitledBorder.LEADING, TitledBorder.TOP, null, null));
		panelTabla.setBounds(10, 149, 218, 190);
		contentPanel.add(panelTabla);
		panelTabla.setLayout(null);

		JScrollPane scrollPaneCategoria = new JScrollPane();
		scrollPaneCategoria.setBounds(10, 22, 198, 157);
		panelTabla.add(scrollPaneCategoria);

		tbMarca = new JTable();
		tbMarca.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				eventoMouseTabla(e);
			}
		});
		tbMarca.setModel(new DefaultTableModel(new Object[][] {},
				new String[] { "Categoria" }) {
			@SuppressWarnings("rawtypes")
			Class[] columnTypes = new Class[] { String.class };

			@SuppressWarnings({ "unchecked", "rawtypes" })
			public Class getColumnClass(int columnIndex) {
				return columnTypes[columnIndex];
			}

			boolean[] columnEditables = new boolean[] { false };

			public boolean isCellEditable(int row, int column) {
				return columnEditables[column];
			}
		});
		tbMarca.getColumnModel().getColumn(0).setResizable(false);
		scrollPaneCategoria.setViewportView(tbMarca);

		JButton btnCancelar = new JButton("");
		btnCancelar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
			}
		});
		btnCancelar.setToolTipText("Cancelar");
		btnCancelar.setIcon(new ImageIcon(Constantes.IMAGEN_CANCELAR));
		btnCancelar.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				eventoBotonCancelar();
			}
		});
		btnCancelar.setBounds(188, 350, 40, 40);
		contentPanel.add(btnCancelar);

		JButton btnAceptar = new JButton("");
		btnAceptar.setToolTipText("Aceptar");
		btnAceptar.setIcon(new ImageIcon(Constantes.IMAGEN_CONFIRMAR));
		btnAceptar.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				eventoBotonAceptar();
			}
		});
		btnAceptar.setBounds(134, 350, 40, 40);
		contentPanel.add(btnAceptar);
	}

	public Marca getMarca() {
		return marca;
	}

	private void cargarTabla() {
		// Se borra la tabla
		DefaultTableModel modeloTabla = (DefaultTableModel) tbMarca.getModel();
		int filas = modeloTabla.getRowCount() - 1;
		if (filas >= 0) {
			for (int i = filas; i >= 0; i--) {
				modeloTabla.removeRow(i);
			}
		}

		// Se llena la tabla
		int fila = 0;
		for (Marca marcaFor : marcaList) {
			DefaultTableModel modelo = (DefaultTableModel) tbMarca.getModel();
			modelo.addRow(new Object[1]);
			tbMarca.setValueAt(marcaFor.getDescripcion(), fila, 0);
			fila++;
		}
	}

	private void eventoBotonBuscar() {
		String descripcion = txtDescripcion.getText();
		marcaList = agregarModificarArticulosFormImpl.buscarMarcas(descripcion);
		cargarTabla();
	}

	private void eventoBotonAceptar() {
		int filaSeleccionada = tbMarca.getSelectedRow();

		if (filaSeleccionada >= 0) {
			marca = marcaList.get(filaSeleccionada);
			this.setVisible(false);

		} else {
			JOptionPane.showMessageDialog(this, "Seleccione una fila.",
					"Mensaje", JOptionPane.WARNING_MESSAGE);
		}

	}

	private void eventoBotonCancelar() {
		marca = null;
		this.setVisible(false);
	}

	private void eventoMouseTabla(MouseEvent e) {
		if (e.getClickCount() == 2) {
			eventoBotonAceptar();
		}
	}

	private void eventoBotonAgregar() {
		AgregarMarcaCategoriaUnidadForm agregarMarcaCategoriaUnidadForm = new AgregarMarcaCategoriaUnidadForm(
				this, Constantes.MARCA);
		agregarMarcaCategoriaUnidadForm.setVisible(true);
		marcaList = agregarModificarArticulosFormImpl.buscarMarcas("");
		cargarTabla();
	}

}
